/*
 * Copyright (c) Jack魏 2022 - 2022, All Rights Reserved.
 */

package cn.jack1996.yiyi.util;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

/**
 * 统一前端返回包装类
 *
 * @author Jack魏
 * @since 2022/12/30 20:53
 */
@Data
@Schema(title = "前端返回包装类")
public class Result<T> {
    /**
     * 成功返回编码
     */
    public static final String SUCCESS_CODE = "200";

    /**
     * 失败返回编码
     */
    public static final String ERROR_CODE = "500";

    /**
     * 状态编码
     */
    @Schema(title = "状态编码")
    private String code;

    /**
     * 信息
     */
    @Schema(title = "返回消息")
    private String message;

    /**
     * 数据
     */
    @Schema(title = "返回数据")
    private T data;

    /**
     * 构造器
     *
     * @param data 数据
     * @param code 编码
     */
    public Result(T data, String code) {
        this.data = data;
        this.code = code;
    }

    /**
     * 构造器
     *
     * @param data 数据
     * @param code 编码
     * @param message 信息
     */
    private Result(T data, String code, String message) {
        this.data = data;
        this.code = code;
        this.message = message;
    }

    /**
     * 成功返回数据
     *
     * @param data 数据
     * @param <T> 泛型
     * @return 返回成功数据
     */
    public static <T> Result<T> success(T data) {
        return new Result<>(data, SUCCESS_CODE);
    }

    /**
     * 失败返回数据
     *
     * @param message 数据
     * @param <T> 泛型
     * @return 返回成功数据
     */
    public static <T> Result<T> fail(String message) {
        return new Result<>(null, ERROR_CODE, message);
    }
}
